2日目 ファイルの基本操作
2日目
ワイルドカード
任意の文字列 *
0個以上の任意の文字列であることに注意(ナシでもOKということ)
任意の1文字 ?
UNIXではディレクトリもファイル
ディレクトリはディレクトリファイルという一種のファイル
lsコマンドがやっているのは、ディレクトリファイルの中身を表示することと言える
周辺機器なども特別なファイルとして扱われている
コマンドの入力と出力
標準入力と標準出力(標準、とはデフォルト、という意味と考えてよい)
stdin 標準入力→キーボード
stdout 標準出力→ターミナルエミュレータのウィンドウ
stderr 標準エラー出力→同上
Ctrl+Dで標準入力からの入力を終了するコマンド
コマンドの出力先をファイルに変更する
コマンド > ファイルのパス
$ cal > cal.txt とすると指定したファイルにcal コマンドの結果が出力される
コマンドの出力先をリダイレクションすると応用できる
code:catコマンド
$ cat > mail.txt →mail.txtを作成する
test@example.com
test2@example.com
test3@example.com
ctrl + D で終了
$ cat mail.txt →書き込まれているか確認
test@example.com
test2@example.com
test3@example.com
$ cat mail.txt > newMail.txt →コピーできる
$ cat newMail.txt
test@example.com
test2@example.com
test3@example.com
ただし、既存のファイルの編集は不可
上書きされてしまう
追記したいときは >>でコマンドをつなぐ
code:>>で追記
$ cat >> mail.txt
newmail@example.com
ctrl + D で終了
$ cat mail.txt →追記されていることを確認
test@example.com
test2@example.com
test3@example.com
newmail@example.com
ファイルからデータを読み込む
コマンド < ファイルのパス
$ cat cal.txt と $cat < cal.txt の結果は同じなのであまり気にすることはない
コマンドの実行前にリダイレクションが行われるため、標準出力と標準入力を同じファイルにはできない
リダイれクションが先なので、出力結果を上書きしようとしても、中身は空になる
パイプ コマンドの実行結果を別のコマンドに渡してさらに処理を行う
コマンド同士をパイプ | でつなぐだけ
幾つでもコマンドをつなげられる
code:パイプの例
$ last | head | cat -n
1 vagrant pts/0 10.0.2.2 Mon Feb 24 06:02 still logged in
2 reboot system boot 3.10.0-957.12.2. Mon Feb 24 06:02 - 06:24 (00:22)
3 vagrant pts/1 10.0.2.2 Sun Feb 23 06:01 - 12:01 (05:59)
4 vagrant pts/0 10.0.2.2 Sun Feb 23 04:42 - 12:01 (07:18)
5 reboot system boot 3.10.0-957.12.2. Sun Feb 23 04:41 - 06:24 (1+01:42)
6 vagrant pts/0 10.0.2.2 Fri Feb 21 14:54 - 16:33 (01:38)
7 reboot system boot 3.10.0-957.12.2. Fri Feb 21 14:53 - 16:33 (01:40)
8 vagrant pts/0 10.0.2.2 Fri Feb 14 16:16 - 16:33 (00:17)
9 reboot system boot 3.10.0-957.12.2. Fri Feb 14 16:15 - 16:33 (7+00:18)
10 vagrant pts/0 10.0.2.2 Wed Feb 12 11:03 - 11:10 (00:07)
ディレクトリの操作
ls -l(ロングフォーマット)の見方
https://gyazo.com/3a7d063a99392978bf808e4d0dc8cfe4
ファイルサイズは、ディレクトリの場合は注意
ディレクトリの中に含まれるファイルのサイズではない!
ディレクトリファイルのサイズ=一覧表のサイズ
ディレクトリの詳しい情報を取得する ls -ld ディレクトリ名
引数にディレクトリ名を渡さなかったら、カレントディレクトリの情報を出す
code:ls -ldの例
$ pwd
/home/vagrant/work
$ ls -ld
drwxrwxr-x. 3 vagrant vagrant 121 Feb 24 06:14 . →ディレクトリ名は表示されない
$ cd ..
$ ls -ld
drwx------. 4 vagrant vagrant 142 Feb 23 12:01 . →表示が変わった
$ ls -ld work/
drwxrwxr-x. 3 vagrant vagrant 121 Feb 24 06:14 work/ →最初の情報と等しい
mkdirコマンド
深いディレクトリを作るときは-p オプション
$ mkdir -p /Music/Rock/HardRock/Metal/Japanese で途中のディレクトリも一緒に作成できる
; セミコロンでコマンドを区切ってワンライナーにする
$ mkdir sample; cd sample ディレクトリ作って移動
rmdir ディレクトリの中身があると削除できない
$ rmdir -r ディレクトリ名として再起的に削除する
ちなみに、-iオプションで確認するようにしてあるとこうなる
code:rm -rの例
$ mkdir -p Music/Rock/HardRock/Metal/Japanese
$ rm -r Music/ →Musicディレクトリの中身を再起的に削除
rm: descend into directory 'Music/'? y
rm: descend into directory 'Music/Rock'? y
rm: descend into directory 'Music/Rock/HardRock'? y
rm: descend into directory 'Music/Rock/HardRock/Metal'? y
rm: remove directory 'Music/Rock/HardRock/Metal/Japanese'? y
rm: remove directory 'Music/Rock/HardRock/Metal'? y
rm: remove directory 'Music/Rock/HardRock'? y
rm: remove directory 'Music/Rock'? y
rm: remove directory 'Music/'? y
$ ls →Musicディレクトリが削除されている
cal.txt crontab dir1 file-1.txt mail.txt newMail.txt newfile1.txt
UNIXのディレクトリ構造
https://gyazo.com/67e30da06fccc209a82571a3ffc80603
「/bin」「/sbin」と「/usr/bin」「/usr/sbin」の相違
「/bin」と「/sbin」にはより重要度の高いコマンドが置かれている
ユーザーが独自にインストールしたコマンドは「/usr/local/bin(/usr/local/sbin)」ディレクトリに保存される
ファイルの移動とコピー
cpコマンド
cpコマンドでオプションを付けずにファイルをコピーすると、元のファイルの更新日時やアクセス権限といった情報がクリアされてしまう
元ファイルの属性を保持したままコピーするには、-p オプションをつける
code:cpコマンドの例
$ cp cal.txt cal-copy.txt
$ cp -p cal.txt cal-p.txt
$ ls -l cal*
-rw-rw-r--. 1 vagrant vagrant 148 Feb 24 07:37 cal-copy.txt
-rw-rw-r--. 1 vagrant vagrant 148 Feb 24 06:05 cal-p.txt ->元と同じ属性
-rw-rw-r--. 1 vagrant vagrant 148 Feb 24 06:05 cal.txt
cp -R コピーもとのディレクトリ コピー先のディレクトリ ディレクトリを丸ごとコピーできる
-vオプションをつけるとワイルドカードを使ったコピーの時などにどのファイルがコピーされたか確認できる
シンボリックリンクとハードリンク
通常はシンボリックリンクを使う
$ ln -s もとのファイルパス シンボリックリンクのパス でリンクを作成
作成するシンボリックリンクからの相対パスでもとのリンクを定義する
カレントディレクトリを表す. ドット、一つ上の階層を表す.. ドット二つ
実はこの二つはディレクトリのハードリンク
https://gyazo.com/396dffebcbdf5f522a6b94f664f1451c